package com.airlines.common;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.joda.time.DateTime;

import com.airlines.crewassignment.domain.DateTimeRange;

/**
 * @author xxxx
 * @date 2018年5月8日 
 * @description
 */
public class DateTimeRangeUtil {
	/**
	 * 判断两个时间段是否有交集
	 * @param dt1
	 * @param dt2
	 * @return
	 */
	public static boolean isIntersection(DateTimeRange dt1, DateTimeRange dt2) {
		if (dt1.getEnd().after(dt2.getStart()) && dt1.getStart().before(dt2.getEnd())) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * 判断某个时间段，是否是另外一个时间段的子集
	 * @param subDateTimeRange
	 * @param parentDateTimeRange
	 * @return
	 */
	public static boolean isSubRange(DateTimeRange subDateTimeRange, DateTimeRange parentDateTimeRange){
		if(!subDateTimeRange.getStart().before(parentDateTimeRange.getEnd())
				&& !!subDateTimeRange.getEnd().after(parentDateTimeRange.getEnd())){
			return true;
		}else{
			return false;
		}
	}
	
	/**
	 * 将某个时间区间，划分成每天(每天的开始时刻)
	 * @param dateTimeRange
	 * @return
	 */
	public static List<DateTime> listDateTime(DateTimeRange dateTimeRange){
		DateTime start = new DateTime(dateTimeRange.getStart()).withTimeAtStartOfDay();
		DateTime end = new DateTime(dateTimeRange.getEnd()).millisOfDay().withMaximumValue();
		List<DateTime> list = new ArrayList<>();
		for(DateTime temp = start; !temp.isAfter(end) ;temp = temp.plusDays(1)){
			list.add(temp);
		}
		return list;
	}
	
	/**
	 * 根据时间，获取今天的开始时间、结束时间区段
	 * @param date
	 * @return
	 */
	public static DateTimeRange getToday(Date date){
		if(date == null){
			return null;
		}else{
			DateTime birthdayStart = new DateTime(date).withTimeAtStartOfDay();
			DateTime birthdayEnd = new DateTime(date).millisOfDay().withMaximumValue();
			return new DateTimeRange(birthdayStart,birthdayEnd);
		}
	}
	
	/**
	 * 判断时间段列表是否有冲突
	 * @param list
	 * @return
	 */
	public static boolean isIntersection(List<DateTimeRange> list) {
		for(int i = 0 ; i < list.size() ; i++){
			DateTimeRange dtr1 = list.get(i);
			for(int j = 0 ; j < list.size() && j != i ; j++){
				DateTimeRange dtr2 = list.get(j);
				if(isIntersection(dtr1, dtr2)){
					return true;
				}
			}
		}
		
		return false;
	}
	
	
}
